package BO;

import java.awt.Canvas;
import java.sql.SQLException;

import javax.swing.JOptionPane;

import DAO.PontosJogador;
import View.View;

public class Motor {

	public static int estado = 0;

	static View view = new View();
	static Vento vento = new Vento();
	static boolean precionado = false;
	static PontosJogador jogador = new PontosJogador();
	static Bola bola = new Bola();
	static boolean controlaSeta = true;
	static int seta;
	static Canvas canvas;

	public static void calcula(boolean precionado) {

		switch (estado) {

		case 0:
			carregaPrimeiraTela();
			break;

		case 1:
			carregaTelaInstrucao();
			break;

		case 2:
			Motor.precionado = precionado;
			carregaTelaJogo();
			break;

		default:
			break;
		}

	}

	public static void carregaPrimeiraTela() {
		view.antigoCanvas.setVisible(false);
		view.desenhaEntrada();
	}

	public static void carregaTelaInstrucao() {
		view.desenhaInstrucao();
	}

	private static void carregaTelaJogo() {
		view.antigoCanvas.setVisible(true);
		Motor.Calcula();
	}

	private static void Calcula() {
		vento.calculaDirecao();
		vento.calculaVelocidade();
		seta = -1;

		while (2 > 1) {
			view.desenha(vento, bola, seta);

			if (controlaSeta == true) { // seta indo para direita
				if (seta == 7) {

					controlaSeta = false;
					seta = 6;
				} else {
					seta++;
				}
			}

			if (controlaSeta == false) { // seta indo para a esquerda
				if (seta == -7) {
					controlaSeta = true;
					seta = -6;
				} else {
					seta--;
				}
			}
		}
	}

	public void lancamento() {

		// Salva a jogada no Banco de Dados, para o Replay.
		String strQuery = "Insert into Jogada (idJogador, velocidadeVento, direcaoLancamento ) values ("
				+ Motor.jogador.getIdJogador()
				+ ","
				+ vento.getVelocidade()
				+ "," + seta + ")";

		try {
			DAO.InterfaceBanco.Atualiza(strQuery);
		} catch (SQLException e) {
			e.printStackTrace();
		}

		int setinha = seta; // direcao da seta -7 < x < 7

		while (vento.getTempo() > 5) { // Sobe

			try {
				wait(70);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			bola.bolaSobe();
			vento.calculaForcaSobe();
			bola.ladoSobe(setinha);
			view.desenha(vento, bola, 0);
		}

		while (vento.getTempo() > 0) { // desce

			try {
				wait(90);
			} catch (InterruptedException e) {
				e.printStackTrace();
			}

			bola.bolaSobe();
			vento.calculaForcaSobe();
			bola.ladoDesce(vento.getVelocidade());
			view.desenha(vento, bola, 0);
		}

		if (bola.beta > 110 && bola.beta < 140) { // acertou o lixo
			while (vento.getTempo() < 5) {
				try {
					wait(70);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}
			bola.bolaDesce();
			vento.calculaForcaDesce();
			view.desenha(vento, bola, 0);
		}
		jogador.adicionaAcertos(); // acertos totais
		jogador.adicionaPontos(); // acertos parciais
	}

}
